package com.heima.utils.common;

import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;

import java.util.Map;
import java.util.SortedMap;

@Slf4j
public enum UrlSignUtils {

    getUrlSignUtils;

    /**
     * @param params 所有的请求参数都会在这里进行排序加密
     * @return 得到签名
     */
    public String getSign(SortedMap<String, String> params) {
        StringBuilder sb = new StringBuilder();
        for (Map.Entry entry : params.entrySet()) {
            if (!entry.getKey().equals("sign")) { //拼装参数,排除sign
                if (ObjectUtil.isNotEmpty(entry.getKey()) && ObjectUtil.isNotEmpty(entry.getValue()))
                    sb.append(entry.getKey()).append('=').append(entry.getValue());
            }
        }
        log.info("Before Sign : {}", sb.toString());
        return DigestUtils.md5Hex(sb.toString()).toUpperCase();
    }

    /**
     * @param params 所有的请求参数都会在这里进行排序加密
     * @return 验证签名结果
     */
    public boolean verifySign(SortedMap<String, String> params) {
        if (params == null || ObjectUtil.isEmpty(params.get("sign"))) return false;
        String sign = getSign(params);
        log.info("verify Sign : {}", sign);
        return ObjectUtil.isNotEmpty(sign) && params.get("sign").equals(sign);
    }

}
